convert f90g_track to Format class. (#844)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Sun, 30 Jan 2022 13:42:50 +0000 (06:42 -0700)
committerGitHub <noreply@github.com>
Sun, 30 Jan 2022 13:42:50 +0000 (06:42 -0700)
CMakeLists.txt
GPSBabel.pro
f90g_track.cc
f90g_track.h [new file with mode: 0644]
vecs.h

index 3fd022483d94a444a5b364559ccada6e191bb1b5..38ffddd799a66c14252b557b3edfb34ba56c3088 100644 (file)
@@ -222,6 +222,7 @@ set(HEADERS
   energympro.h
   exif.h
   explorist_ini.h
+  f90g_track.h
   filter.h
   filter_vecs.h
   format.h
index dca2de4a48e48aeddbf4c0a58fbd7c4100fa54ea..bf0c2c78d9ee6aa5e0d6e58503358eeb5e928983 100644 (file)
@@ -209,6 +209,7 @@ HEADERS =  \
   energympro.h \
   exif.h \
   explorist_ini.h \
+  f90g_track.h \
   filter.h \
   filter_vecs.h \
   format.h \
index f9eee80e6dc262f6bf6200275a9564043ef5ac4f..611932ea4d44250b1728655cd33ecd4dd8c93ddc 100644 (file)
 
  */
 
-#include "defs.h"
-#include "gbfile.h"
-#include <QDebug>
-#include <QFileInfo>
+#include "f90g_track.h"
 
-#define MYNAME "f90g_track"
-#define TTRECORDSIZE      249
-#define HEADERRECORDSIZE  30
-#define FLIPEDBITS        0xaa
+#include <QDate>      // for QDate
+#include <QDateTime>  // for QDateTime
+#include <QFileInfo>  // for QFileInfo
+#include <QTime>      // for QTime
+#include <Qt>         // for UTC
 
+#include <cstdio>     // for sscanf, snprintf, SEEK_SET
+#include <cstring>    // for memcmp
 
+#include "defs.h"     // for fatal, Waypoint, track_add_head, track_add_wpt, route_head
+#include "gbfile.h"   // for gbfread, gbfclose, gbfopen, gbfseek
 
-static gbfile* fin = nullptr;
-static route_head* track = nullptr;
 
-
-static
-QVector<arglist_t> f90g_track_args = {
-};
+#define MYNAME "f90g_track"
+#define TTRECORDSIZE      249
+#define HEADERRECORDSIZE  30
+#define FLIPEDBITS        0xaa
+#define VALIDHEADER "MEDIA 1."
 
 /*******************************************************************************
 * %%%        global callbacks called by gpsbabel main process              %%% *
 *******************************************************************************/
-#define VALIDHEADER "MEDIA 1."
-static void
-f90g_track_rd_init(const QString& fname)
+void
+F90gTrackFormat::rd_init(const QString& fname)
 {
   char header[HEADERRECORDSIZE];
 
@@ -74,18 +74,14 @@ f90g_track_rd_init(const QString& fname)
   }
 }
 
-static void
-f90g_track_rd_deinit()
+void
+F90gTrackFormat::rd_deinit()
 {
   gbfclose(fin);
 }
 
-// needed conversion factors
-static const double MIN_PER_DEGREE  = 600000.0f;
-static const float  SPEED_CONVERSION = (10.0f)/(36.0f); // convert KPH to meters per second
-
-static void
-f90g_track_read()
+void
+F90gTrackFormat::read()
 {
   char northSouth, eastWest, velocityMark, ttRec[TTRECORDSIZE], tempBuf[20];
   int year, mon, mday, hour, min, sec, latitudeDeg, latitudeMin, longitudeDeg, longitudeMin, velocity;
@@ -139,22 +135,3 @@ f90g_track_read()
     }
   }
 }
-
-// capabilities below means: we can only read trace file.
-
-ff_vecs_t f90g_track_vecs = {
-  ff_type_file,
-  { ff_cap_none, (ff_cap)(ff_cap_read), ff_cap_none },
-  f90g_track_rd_init,
-  nullptr,
-  f90g_track_rd_deinit,
-  nullptr,
-  f90g_track_read,
-  nullptr,
-  nullptr,
-  &f90g_track_args,
-  CET_CHARSET_UTF8, 0                  /* ascii is the expected character set */
-  /* not fixed, can be changed through command line parameter */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/f90g_track.h b/f90g_track.h
new file mode 100644 (file)
index 0000000..5e70976
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+  Map file reader for F90G Automobile DVR.
+
+    Copyright (C) 2014 Jim Keeler, James.L.Keeler@gmail.com
+    Copyright (C) 2001-2013 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+    Read the map file contents picking out the defined record types.
+
+    The map file contains a constant 30 byte header record followed by a variable number of
+    TT records.  The TT records start with the two characters "TT" and are 251 bytes long.
+    The TT records contain values for time, position and velocity.
+
+ */
+#ifndef F90G_TRACK_H_INCLUDED_
+#define F90G_TRACK_H_INCLUDED_
+
+#include <QString>   // for QString
+#include <QVector>   // for QVector
+
+#include "defs.h"    // for ff_cap, arglist_t, ff_cap_none, CET_CHARSET_UTF8, ff_cap_read, ff_type, ff_type_file, route_head
+#include "format.h"  // for Format
+#include "gbfile.h"  // for gbfile
+
+
+class F90gTrackFormat : public Format
+{
+public:
+  QVector<arglist_t>* get_args() override
+  {
+    return &f90g_track_args;
+  }
+
+  ff_type get_type() const override
+  {
+    return ff_type_file;
+  }
+
+  QVector<ff_cap> get_cap() const override
+  {
+    //         waypoints,                tracks,      routes
+    return { ff_cap_none, (ff_cap)(ff_cap_read), ff_cap_none };
+  }
+
+  QString get_encode() const override
+  {
+    return CET_CHARSET_UTF8;
+  }
+
+  int get_fixed_encode() const override
+  {
+    return 0;
+  }
+
+  void rd_init(const QString& fname) override;
+  void read() override;
+  void rd_deinit() override;
+
+private:
+  /* Constants */
+
+  // needed conversion factors
+  static constexpr double MIN_PER_DEGREE  = 600000.0;
+  static constexpr float  SPEED_CONVERSION = (10.0f)/(36.0f); // convert KPH to meters per second
+
+  /* Data Members */
+
+  gbfile* fin = nullptr;
+  route_head* track = nullptr;
+
+  QVector<arglist_t> f90g_track_args = {
+  };
+
+};
+#endif // F90G_TRACK_H_INCLUDED_
diff --git a/vecs.h b/vecs.h
index 6b00f1275a0a0dfd985eb7a530ed34e1aaa22e22..e610ce5051c3008561b27c4ed9d71c52e603ac07 100644 (file)
--- a/vecs.h
+++ b/vecs.h
@@ -30,6 +30,7 @@
 #include "defs.h"
 #include "dg-100.h"
 #include "energympro.h"
+#include "f90g_track.h"
 #include "exif.h"
 #include "format.h"
 #include "garmin_fit.h"
@@ -126,7 +127,6 @@ extern ff_vecs_t mmo_vecs;
 extern ff_vecs_t v900_vecs;
 extern ff_vecs_t enigma_vecs;
 extern ff_vecs_t format_garmin_xt_vecs;
-extern ff_vecs_t f90g_track_vecs;
 #endif // MAXIMAL_ENABLED
 
 class Vecs
@@ -320,7 +320,7 @@ private:
   LegacyFormat format_garmin_xt_fmt {format_garmin_xt_vecs};
   GarminFitFormat format_fit_fmt;
   MapbarTrackFormat mapbar_track_fmt;
-  LegacyFormat f90g_track_fmt {f90g_track_vecs};
+  F90gTrackFormat f90g_track_fmt;
   MapfactorFormat mapfactor_fmt;
   EnergymproFormat energympro_fmt;
   MyNavFormat mynav_fmt;